; long long int division(void* dividendo, int divisor)

global division
extern malloc

section .text

division:
	push ebp
	mov ebp, esp
	push esi
	push edi
	push ebp
	
	push dword 12 ; Cantidad de bytes que voy a pedir con malloc. Como divido un numero de 96 bits por uno de 32 bits me va a dar uno de 96 bits. O sea 12 bytes.
	call malloc
	add esp, 4 ; Restauro la pila.
	cmp eax, 0 ; Verifico si pudo obtener la memoria.
	je fin ; Si no pude reservar la memoria salto a fin.
	
	mov edi, eax ; Sino guardo el puntero de la memoria reservada en EDI. Aca va a ir el resultado.
	mov ebx, [ebp + 8] ; Muevo a EBX el puntero de el dividendo.
	mov esi, [ebp + 12] ; Muevo a ESI el divisor.
	mov ecx, 3 ; Esta es la cantidad de "cajitas" de 32 bits que voy a dividir
	
	xor edx, edx ; Limpio EDX.
	
ciclo:
	mov eax, [ebx + ecx * 4 - 4] ; Muevo a EAX la proxima parte a dividir de el dividendo.
	idiv esi ; Divido el dividendo por el divisor.
	mov [edi + ecx * 4 - 4], eax ; Muevo el cociente de mi division al resultado.
	loop ciclo
	
	mov eax, edi ; Muevo a EAX el puntero al resultado.
	
fin:
	pop ebp
	pop edi
	pop esi
	pop ebp
	ret
